from django.db import models
from django.conf import settings

class Category(models.Model):
    """
    任务分类模型
    用于对任务进行分类管理，每个任务可以属于一个分类
    
    字段说明：
    - name: 分类名称，最大长度50个字符
    - description: 分类描述，可选字段
    - created_at: 创建时间，自动设置为记录创建时的时间
    - updated_at: 更新时间，每次记录更新时自动更新
    """
    name = models.CharField(max_length=50)
    description = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class Tag(models.Model):
    """
    任务标签模型
    用于给任务添加标签，一个任务可以有多个标签
    
    字段说明：
    - name: 标签名称，最大长度50个字符
    - color: 标签颜色，使用十六进制颜色代码，默认为黑色
    - created_at: 创建时间，自动设置为记录创建时的时间
    """
    name = models.CharField(max_length=50)
    color = models.CharField(max_length=7, default='#000000')
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

class Task(models.Model):
    """
    任务模型
    核心模型，用于管理待办事项
    
    字段说明：
    - title: 任务标题，最大长度200个字符
    - description: 任务描述，可选字段
    - due_date: 截止日期，可选字段
    - priority: 优先级，可选值：L(低)、M(中)、H(高)
    - status: 状态，可选值：P(待办)、I(进行中)、C(已完成)
    - category: 所属分类，外键关联到Category模型，可选字段
    - tags: 标签，多对多关联到Tag模型，可选字段
    - created_by: 创建者，外键关联到User模型
    - created_at: 创建时间，自动设置为记录创建时的时间
    - updated_at: 更新时间，每次记录更新时自动更新
    - completed_at: 完成时间，任务完成时设置
    """
    PRIORITY_CHOICES = [
        ('L', '低'),
        ('M', '中'),
        ('H', '高'),
    ]

    STATUS_CHOICES = [
        ('P', '待办'),
        ('I', '进行中'),
        ('C', '已完成'),
    ]

    title = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    due_date = models.DateTimeField(null=True, blank=True)
    priority = models.CharField(max_length=1, choices=PRIORITY_CHOICES, default='M')
    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='P')
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True)
    tags = models.ManyToManyField(Tag, blank=True)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    completed_at = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-created_at']  # 默认按创建时间倒序排列
